package com.xiaoxi.logaspectcommon.common.util;

import org.apache.commons.lang3.ArrayUtils;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.Signature;
import org.aspectj.lang.reflect.MethodSignature;

/**
 * @ClassName AOPUtils
 * @Description
 * @Author xiaoxi
 * @Date 2022/10/30 23:04
 * @Version 1.0
 */
public class AOPUtils {

    /**
     * 通过参数名称 获取目标方法的参数值
     *
     * @param joinPoint 切入点对象
     * @param paramName 参数名称
     * @return 参数值对象
     */
    public static Object getParamValue(JoinPoint joinPoint, String paramName) {

        Object[] args = joinPoint.getArgs();
        Signature signature = joinPoint.getSignature();
        MethodSignature methodSignature = (MethodSignature) signature;

        // 通过这获取到方法的所有参数名称的字符串数组
        String[] parameterNames = methodSignature.getParameterNames();
        // 通过需要获取的参数名称的下标获取到对应的值
        int paramIndex = ArrayUtils.indexOf(parameterNames, paramName);

        if (paramIndex == -1) {
            return null;
        }
        return args[paramIndex];
    }
}
